package com.agile.leetcode.hutool.captcha;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.CircleCaptcha;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.ShearCaptcha;
import cn.hutool.captcha.generator.MathGenerator;
import cn.hutool.captcha.generator.RandomGenerator;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Console;
import org.junit.Test;

import java.io.File;
import java.util.Scanner;

/**
 * 验证码的生成
 *
 * @Author ChenZhangKun
 * @Date 2021/1/4 10:27
 */
@SuppressWarnings("all")
public class CaptchaDemo {
    /**
     * 线性干扰的验证码
     */
    @Test
    public void test1() {
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
        // 写出到文件-》此时会生成一张图片
        lineCaptcha.write(FileUtil.file("D:\\czk\\hutool\\captcha\\1.jpg"));
        // 输出code
        Console.log(lineCaptcha.getCode());
        // 验证有效性
        boolean verify = lineCaptcha.verify("1234");
        System.out.println(verify);
        // 重新生成验证码
        lineCaptcha.createCode();
        // 图片
        lineCaptcha.write(FileUtil.file("D:\\czk\\hutool\\captcha\\2.jpg"));
        // 拿到验证码
        Console.log(lineCaptcha.getCode());
    }

    /**
     * 圆圈干扰验证码
     */
    @Test
    public void test2() {
        // arg1 验证码长
        // arg2 验证码宽
        // arg3 字符个数
        // arg4 干扰的圆圈个数
        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);
        // 生成的图片
        circleCaptcha.write(FileUtil.file("D:\\czk\\hutool\\captcha\\3.jpg"));
        // 拿到数据
        System.out.println(circleCaptcha.getCode());
        // 验证
        System.out.println(circleCaptcha.verify("456"));
    }

    /**
     * 扭曲干扰验证妈
     */
    @Test
    public void test3() {
        // 创建扭曲干扰二维码
        ShearCaptcha shearCaptcha = CaptchaUtil.createShearCaptcha(200, 100, 4, 3);
        // 生成图片
        shearCaptcha.write(FileUtil.file("D:\\czk\\hutool\\captcha\\4.jpg"));
        // 拿到数据
        System.out.println(shearCaptcha.getCode());
        // 验证
        System.out.println(shearCaptcha.verify("45456"));
    }

    /**
     * 自定义验证码
     */
    @Test
    public void test4() {
        // 自定义纯数字的验证码（在"123456"中随机选4位数字，可重复）
        RandomGenerator randomGenerator = new RandomGenerator("123456", 4);
        // 设置线性干扰二维码
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
        lineCaptcha.setGenerator(randomGenerator);
        // 生成code
        lineCaptcha.write(FileUtil.file("D:\\czk\\hutool\\captcha\\5.jpg"));
        System.out.println(lineCaptcha.getCode());
    }

    /**
     * 定义为四则运算方式=>
     */
    @Test
    public void test5() {
        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 15);
        // 自定义验证妈为四则运算方式
        circleCaptcha.setGenerator(new MathGenerator());
        // 输出图篇
        circleCaptcha.write(new File("D:\\czk\\hutool\\captcha\\6.jpg"));
        // 拿内容
        System.out.println(circleCaptcha.getCode());
        // 验证
        Scanner scanner=new Scanner(System.in);
        int i = scanner.nextInt();
        // 验证
        System.out.println(circleCaptcha.verify(i+""));
    }

    public static void main(String[] args) {
        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 15);
        // 自定义验证妈为四则运算方式
        circleCaptcha.setGenerator(new MathGenerator());
        // 输出图篇
        circleCaptcha.write(new File("D:\\czk\\hutool\\captcha\\6.jpg"));
        // 拿内容
        System.out.println(circleCaptcha.getCode());
        // 验证
        Scanner scanner=new Scanner(System.in);
        int i = scanner.nextInt();
        // 验证
        System.out.println(circleCaptcha.verify(i+""));
    }
}
